"""
python中内置的几个高阶函数：
A：列表.sort(key,reverse=False)
    第二个参数：key,函数，用于表示排序的规则
        def sort_rule(x):
            return 数值/字符串
    第三个参数：revers=False，True

    总结：
        默认情况下：排序：按照数值升序
                    降序：revers=True

        自定义排序：自己定义规则：函数
        list.sort(key=函数名)
        列表中的每一个元素，应用到key这个函数上，根据函数的返回值进行升序排序。
        实际上返回是：原始的数据的排序。
B：map()
C：reduce()
D：filter()
"""
list1 = [1, 3, 5, 8, 4, -9, -2]

# key 函数, 排序的规则
list1.sort(key=abs)
print(list1)

list2 = ['abc', 'bcde', 'FFFFf', 'zz']

list2.sort()
print(list2)


def sort_rule(str):
    return len(str)


list2.sort(key=sort_rule)
print(list2)

list_stu = [{'name': 'zhangsan', 'age': 18, 'gender': 0}, {'name': 'lisi', 'age': 22, 'gender': 1},
            {'name': 'lcc', 'age': 11, 'gender': '1'}]


# list_stu.sort()  # TypeError: '<' not supported between instances of 'dict' and 'dict'
# print(list_stu)


def myrule(dict1):
    return dict1.get('age')


list_stu.sort(key=myrule)

print(list_stu)

# 忽略大小写排序
list4 = ["bob", "Rose", "Tom", "jerry", "Jack"]


# 规则的定义 套路, 参数写元素的类型   return 写可比性(或者说比较的点)

def ignor_rule(str1):
    return str1.lower()


# list4.sort()
list4.sort(key=ignor_rule)
print(list4)
